﻿using System;
using System.Collections.Generic;

using System.Text;

using TerminologiaSinacor.Presenter;
using TerminologiaSinacor.Presenter.Utility;

using System.Data.OracleClient;
using System.Data;
using System.Configuration;


namespace TerminologiaSinacor.Presenter.DAL.Oracle
{
    public class FontesDAO
    {


        public static List<Fontes> search(String IdModulo)
        {
            List<Fontes> fontess = new List<Fontes>();

            
            string sql = @"  select 
                   
                     fonte.COD_TIPO_FONTE
                    ,tipoFonte.NOME_TIPO_FONTE
                    ,fonte.COD_FONTE
                    ,fonte.NOME_FONTE
                    
                    from     TS_FONTE fonte
                     left join TS_TIPO_FONTE tipoFonte 
                     on tipoFonte.COD_TIPO_FONTE 
                      = fonte.COD_TIPO_FONTE 
                     left join TS_MODULO modulo on fonte.COD_MODULO = modulo.COD_MODULO
                     left join TS_MODULO moduloPai on modulo.COD_MODULO_PAI = moduloPai.COD_MODULO

where
modulo.COD_MODULO = " + IdModulo;


            using (IDataReader rdr = TerminologiaSinacor.Presenter.DAL.Oracle.OracleHelper.executeReader(ConfigurationManager.AppSettings["ConnectionStringSinaTools"], System.Data.CommandType.Text, sql, null))
            {
                while (rdr.Read())
                {
                    Fontes myFontes = new Fontes();

                    myFontes.Fonte     = rdr["NOME_FONTE"].ToString();
                    myFontes.FonteTipo = rdr["NOME_TIPO_FONTE"].ToString();
                    
                    myFontes.IdFonteIdFonteTipoNomeFonte = rdr["COD_FONTE"].ToString() + "#" + rdr["COD_TIPO_FONTE"].ToString() + "#" + rdr["NOME_FONTE"].ToString();
 
                    fontess.Add(myFontes);
                }
            }

            return fontess;
        }


        public static List<Fontes> search(Fontes filtroFontes)
        {
            List<Fontes> fontess = new List<Fontes>();

            string sql = "";

            sql = Util.convertToSqlSearch(sql, "IND_TERMO_AVALIADO", filtroFontes.Avaliado == true ? "1": "" );

            sql = Util.convertToSqlSearch(sql, "TXT_COMENTARIO", filtroFontes.Comentario);

            sql = Util.convertToSqlSearch(sql, "to_char(DATA_SUGESTAO,'dd/mm/yyyy')", filtroFontes.Data);

            sql = Util.convertToSqlSearch(sql, "DESC_TERMO", filtroFontes.Descricao);

            sql = Util.convertToSqlSearch(sql, "IND_TERMO_DESPREZADO", filtroFontes.Desprezado == true ? "1" : "");

            sql = Util.convertToSqlSearch(sql, "TXT_COMENTARIO", filtroFontes.Filtro);//[TODO] repete descricaço?

            sql = Util.convertToSqlSearch(sql, "NOME_FONTE", filtroFontes.Fonte);

            sql = Util.convertToSqlSearch(sql, "NOME_TIPO_FONTE", filtroFontes.FonteTipo);

            sql = Util.convertToSqlSearch(sql, "COD_TERMO", filtroFontes.Id);

            sql = Util.convertToSqlSearch(sql, "modulo.NOME_MODULO", filtroFontes.Modulo); //incluido "modulo." - esertorio - 200809241741

            sql = Util.convertToSqlSearch(sql, "moduloPai.NOME_MODULO", filtroFontes.ModuloPai);

            sql = Util.convertToSqlSearch(sql, "NOME_TERMO", filtroFontes.NomeTermo);

            sql = Util.convertToSqlSearch(sql, "NOME_RESPONSAVEL", filtroFontes.Responsavel);

            sql = Util.convertToSqlSearch(sql, "NOME_TERMO_SUGERIDO", filtroFontes.TermoSugerido);

            sql = Util.convertToSqlSearch(sql, "TXT_AJUDA", filtroFontes.TextoAjuda);

            sql = Util.convertToSqlSearch(sql, "fonte.COD_FONTE", filtroFontes.FonteId); //incluido "fonte." - esertorio - 200809241744

            sql = Util.convertToSqlSearch(sql, "modulo.COD_MODULO", filtroFontes.ModuloId);

            sql = Util.convertToSqlSearch(sql, "tipoFonte.COD_TIPO_FONTE", filtroFontes.TipoFonteId); //incluido "tipoFonte." - esertorio - 200809241744


            //alterados os alias de algumas colunas para contornar o erro "ORA-00918: coluna definida de maneira ambígua" - esertorio - 200809241738
            sql = @"
                    select 

                     termo.COD_TERMO
                    ,termo.NOME_TERMO
                    ,termo.TXT_AJUDA
                    ,termo.DESC_TERMO
                    ,termo.TXT_COMENTARIO
                    ,termo.NOME_TERMO_SUGERIDO                    
                    ,to_char(termo.DATA_SUGESTAO,'dd/mm/yyyy') DATA_SUGESTAO
                    ,termo.COD_RESP_SUGESTAO
                    ,termo.COD_FONTE COD_FONTE_termo
                    ,termo.NUM_NIVEL_DETALHE_FONTE
                    ,termo.IND_TERMO_DESPREZADO
                    ,termo.IND_TERMO_AVALIADO
                    ,termo.COD_TERMO_GLOSSARIO

                    ,responsavel.COD_RESPONSAVEL
                    ,responsavel.NOME_RESPONSAVEL
                    ,responsavel.TXT_CONTATO_RESPONSAVEL

                    ,fonte.COD_FONTE
                    ,fonte.COD_TIPO_FONTE COD_TIPO_FONTE_fonte
                    ,fonte.NOME_FONTE
                    ,fonte.COD_MODULO COD_MODULO_fonte
                    ,fonte.DESC_FONTE
                     
                    ,tipoFonte.COD_TIPO_FONTE
                    ,tipoFonte.NOME_TIPO_FONTE
                    ,tipoFonte.DESC_TIPO_FONTE

                    ,modulo.COD_MODULO
                    ,modulo.NOME_MODULO
                    ,modulo.DESC_MODULO
                    ,modulo.COD_MODULO_PAI COD_MODULO_PAI_modulo

                    ,moduloPai.COD_MODULO COD_MODULO_moduloPai
                    ,moduloPai.NOME_MODULO NOME_MODULO_PAI
                    ,moduloPai.DESC_MODULO DESC_MODULO_moduloPai
                    ,moduloPai.COD_MODULO_PAI COD_MODULO_PAI_moduloPai

                    from TS2_TERMO termo 
                     left join TS_RESPONSAVEL responsavel on termo.COD_RESP_SUGESTAO = responsavel.COD_RESPONSAVEL
                     left join TS_FONTE fonte on termo.COD_FONTE = fonte.COD_FONTE 
                     left join TS_TIPO_FONTE tipoFonte on tipoFonte.COD_TIPO_FONTE = fonte.COD_TIPO_FONTE 
                     left join TS_MODULO modulo on fonte.COD_MODULO = modulo.COD_MODULO
                     left join TS_MODULO moduloPai on modulo.COD_MODULO_PAI = moduloPai.COD_MODULO
                     where 1 = 1 
 
 " + sql + " order by termo.NOME_TERMO";

            using (IDataReader rdr = TerminologiaSinacor.Presenter.DAL.Oracle.OracleHelper.executeReader(ConfigurationManager.AppSettings["ConnectionStringSinaTools"], System.Data.CommandType.Text, sql, null))
            {
                while (rdr.Read())
                {
                    Fontes myFontes = new Fontes();

                    myFontes.Id = rdr["COD_TERMO"].ToString();
                    myFontes.Modulo = rdr["NOME_MODULO"].ToString();
                    myFontes.ModuloPai = rdr["NOME_MODULO_PAI"].ToString();
                    myFontes.FonteTipo = rdr["NOME_TIPO_FONTE"].ToString();
                    myFontes.Fonte = rdr["NOME_FONTE"].ToString();
                    myFontes.NomeTermo = rdr["NOME_TERMO"].ToString();
                    myFontes.TextoAjuda = rdr["TXT_AJUDA"].ToString();
                    myFontes.Filtro = rdr["TXT_COMENTARIO"].ToString();
                    myFontes.TermoSugerido = rdr["NOME_TERMO_SUGERIDO"].ToString();
                    myFontes.Data = rdr["DATA_SUGESTAO"].ToString();
                    myFontes.Responsavel = rdr["NOME_RESPONSAVEL"].ToString();
                    myFontes.Avaliado = rdr["IND_TERMO_AVALIADO"].ToString() == "1" ;
                    myFontes.AvaliadoLabel = rdr["IND_TERMO_AVALIADO"].ToString() == "1" ? "Sim" : "Não";
                
                    myFontes.Desprezado = rdr["IND_TERMO_DESPREZADO"].ToString() == "1";
                    myFontes.DesprezadoLabel = rdr["IND_TERMO_DESPREZADO"].ToString() == "1" ? "Sim" : "Não";//[TODO] Criar uma property para isso

                    myFontes.Descricao = rdr["DESC_TERMO"].ToString();

                    myFontes.Comentario = rdr["TXT_COMENTARIO"].ToString();

                    myFontes.IdFonteIdFonteTipoNomeFonte = rdr["COD_FONTE"].ToString() + "#" + rdr["COD_TIPO_FONTE"].ToString() + "#" + rdr["NOME_FONTE"].ToString();
 

                    fontess.Add(myFontes);
                }
            }

            return fontess;
        }
    }
}


